/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package redinftel.formularios;

import java.util.List;
import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpSession;
import redinftel.entidades.Usuario;
import redinftel.sesiones.UsuarioFacadeRemote;

/**
 * Clase que que busca el usuario por su email
 * y invita al usaurio
 * @author Six Degrees Team
 */
@ManagedBean
@RequestScoped
public class InvitarBean {
    @EJB
    private UsuarioFacadeRemote usuarioFacade;

    String mensaje;
    String email;
    private int codigoError;

    public int getCodigoError() {
        return codigoError;
    }

    public void setCodigoError(int codigoError) {
        this.codigoError = codigoError;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getMensaje() {
        return mensaje;
    }

    public void setMensaje(String mensaje) {
        this.mensaje = mensaje;
    }

    /** Creates a new instance of InvitarBean */
    public InvitarBean() {
         ChangeLocaleBean.cambiar();
    }
/**
 *
 * @return no redirige a ninguna pagina
 * comprueba que se haya introducido correctamente el email
 * valida el email,y busca al usaurio segun ese email.
 */
    public String doInvitar() {
        ChangeLocaleBean.cambiar();
        if (email.equals("")) {
            codigoError=1;
        } else if (email.length() > 40) {
            codigoError=2;
        } else if (!validarEmail()) {
            codigoError=3;
        } else {
            List<Usuario> usuario = usuarioFacade.findByEmail(email);
            if (!usuario.isEmpty()) {
                codigoError=4;
            }
            else {
                FacesContext con = FacesContext.getCurrentInstance();
                HttpSession session = (HttpSession) con.getExternalContext().getSession(true);
                Usuario u = (Usuario) session.getAttribute("usuario");

                try {
                    this.enviarEmail(u);
                } catch (MessagingException ex) {
                    Logger.getLogger(InvitarBean.class.getName()).log(Level.SEVERE, null, ex);
                }
                codigoError=5;
            }
        }

        return null;
    }
/**
 *
 * @return devuelve un boleano en el caso de validar correctamente el email
 * o false en el caso de no validarlo
 */
    public boolean validarEmail() {
        Pattern p = Pattern.compile("^[\\w\\-\\_]+(\\.[\\w\\-\\_]+)*@([A-Za-z0-9-]+\\.)+[A-Za-z]{2,4}$");
        Matcher m = p.matcher(email);
        if (m.find()) {
            //Es correcta
            return true;
        } else {
            //No es correcta
            return false;
        }
    }
/**
 *
 * @param u usaurio al que se le va mandar el correo
 * @throws MessagingException
 */
    public void enviarEmail(Usuario u) throws MessagingException {
        Properties props = new Properties();
        props.setProperty("mail.smtp.host", "smtp.gmail.com");
        props.setProperty("mail.smtp.starttls.enable", "true");
        props.setProperty("mail.smtp.port","587");
        props.setProperty("mail.smtp.user", "red.sixdegrees@gmail.com");
        props.setProperty("mail.smtp.auth", "true");

        Session session = Session.getDefaultInstance(props);
        session.setDebug(true);

        MimeMessage message = new MimeMessage(session);

        message.setFrom(new InternetAddress("red.sixdegrees@gmail.com"));
        message.addRecipient(Message.RecipientType.TO, new InternetAddress(this.email));
        message.setSubject("Invitacion a Six Degrees");
        message.setText("Hola \nSu amigo " +u.getPerfil().getNombre() +" " +u.getPerfil().getApellidos()
                +" le ha invitado a probar la red social Six  Degrees. Para registrarse entre en: "
                + " http://localhost:8080/redinftel-war/ y complete el formulario de registro para poder estar en contacto con tus amigos.");

        Transport t = session.getTransport("smtp");
        t.connect("red.sixdegrees@gmail.com","redsocial");
        t.sendMessage(message,message.getAllRecipients());
        t.close();
    }
}
